package com.xcm.service;

import com.xcm.exception.ServiceException;
import com.xcm.model.SysUser;
import com.xcm.model.vo.SysUserVo;
import com.xcm.page.PageInfo;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * 用户业务
 *
 * @author 林强
 * @date 2018-04-11 17:46
 */
public interface SysUserService extends BaseService<SysUser> {
    /**
     * 用户登陆
     *
     * @param userName 用户名
     * @param password 密码
     * @param system   系统标志
     * @return
     */
    SysUserVo login(String userName, String password, String system);

    /**
     * 用户登录
     *
     * @param username 用户名
     * @param password 密码
     * @return SysUser
     */
    SysUser login(String username, String password);

    /**
     * 新增用户(绑定角色)
     *
     * @param sysUser 新增的用戶对象
     * @param roleIds 角色id(多个以英文的逗号隔开)
     * @return
     */
    int save(SysUser sysUser, String roleIds);

    /**
     * 新增用户并返回
     *
     * @param sysUser 新增的用户对象
     * @return 返回带id的对象
     */
    SysUser saveAndGetId(SysUser sysUser);

    /**
     * 判断是否可删除
     *
     * @param userId
     * @return true可删除，反之不可
     */
    boolean canDelete(Integer userId);

    /**
     * 更新用户
     *
     * @param sysUser 更新的用户对象
     * @param roleIds 角色id(多个以英文的逗号隔开)
     */
    int update(SysUser sysUser, String roleIds) throws ServiceException;

    /**
     * 根据用户名查询用户
     *
     * @param userName 用户名
     * @return
     */
    SysUser getByUsername(String userName);

    /**
     * 用户列表分页
     *
     * @param paramMap 参数
     * @param pageNum  第几页
     * @param pageSize 每页几条
     * @return
     */
    PageInfo listPage(Map<String, Object> paramMap, Integer pageNum, Integer pageSize);

    /**
     * 根据用户id查询VO类
     *
     * @param userId 用户id
     * @return
     */
    SysUserVo getByIdVo(Integer userId);

    /**
     * 查询集合
     *
     * @param paramMap 参数map
     * @return
     */
    List<SysUserVo> list(Map<String, Object> paramMap);

    /**
     * 设置用户启用状态
     *
     * @param paramMap
     * @return 影响行数
     */
    int setEnableOrDisable(Map<String, Object> paramMap);

    /**
     * 批量启用用户
     *
     * @param userIdList 用户id数组
     * @return 影响行数
     */
    int batchEnable(List<Integer> userIdList);

    /**
     * 批量停用用户
     *
     * @param userIdList 用户id数组
     * @return 影响行数
     */
    int batchDisable(List<Integer> userIdList);

    /**
     * 导入用户
     *
     * @param file excel文件
     * @return
     * @throws IOException
     */
    String importUserBatch(MultipartFile file) throws IOException;

    /**
     * 批量删除用户
     *
     * @param userIdList 用户id集合
     * @return
     */
    int batchDeleteById(List<Integer> userIdList);

    /**
     * 修改密码
     *
     * @param userId      用户id
     * @param newPassword 新密码
     * @return
     */
    int changePassword(Integer userId, String newPassword);

    /**
     * 根据用户名获取用户VO
     *
     * @param username
     * @return
     */
    SysUserVo getByUsernameVo(String username);

}
